home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / brklyprl.lha / Emulator / basics.h < prev    next >
C/C++ Source or Header  |  1989-04-14  |  859b  |  48 lines

  1.  
  2. /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
  3.  
  4. /* Copyright Herve' Touati, Aquarius Project, UC Berkeley */
  5.  
  6. extern unsigned MODE;
  7.  
  8. enum {
  9.   MODE_WRITE,
  10.   MODE_READ
  11.   };
  12.  
  13. enum {
  14.   UNIFY_SUCCESS = 1,
  15.   UNIFY_FAIL = 0
  16.   };
  17.  
  18. inline void Trail(Cell c)
  19. {
  20.   *TR-- = c;
  21. }
  22.  
  23. inline void Bind(Cell var, Cell val) 
  24. {
  25.   CellPtr loc = addr(var);
  26. #ifdef WITH_GC
  27.   if (loc >= E0 && (loc < cellp(B[E_CP_OFFSET]) || loc < E2))
  28.     Trail(var);
  29.   else if (loc < cellp(B[H_CP_OFFSET]) || loc < HMIN)
  30.     Trail(var);
  31. #else
  32.   if ((loc >= E0 && loc < cellp(B[E_CP_OFFSET])))
  33.     Trail(var);
  34.   else if (loc < cellp(B[H_CP_OFFSET]))
  35.     Trail(var);
  36. #endif
  37.   *loc = val;
  38. }
  39.  
  40. extern Cell Deref(Cell c);
  41.  
  42. inline Cell deref(Cell c) {
  43.   return (get_tag(c) != TAGREF || c == lvalue(c)) ? c : Deref(c);
  44. }
  45.  
  46. extern void Fail();
  47. extern unsigned unify(Cell, Cell);
  48.